perm filename PART1[DOC,BGB] blob
sn#093410 filedate 1974-03-24 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00035 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00004 00002 STANFORD ARTIFICIAL INTELLIGENCE LABORATORY MARCH 1974
C00007 00003 0.0 CONTENTS.
C00009 00004 1.0 PRIMER.
C00013 00005
C00018 00006
C00020 00007
C00024 00008
C00029 00009
C00034 00010 2.0 EXAMPLES.
C00038 00011 The Platonic Solids.
C00039 00012 2.7 Pulgas Water Temple.
C00040 00013 3.0 GEOMETRIC COMMANDS
C00042 00014 3.1 EUCLIDEAN TRANSFORMATIONS.
C00046 00015 3.2 STRENGTHS OF TRANSFORMATION.
C00049 00016 3.3 EUCLIDEAN SWITCHES.
C00054 00017 3.4 THE ITERATION COUNTER.
C00057 00018 4.0 TOPOLOGICAL COMMANDS.
C00060 00019 4.1 EASY CREATIONS.
C00063 00020 4.2 COPY, KILL AND DUAL.
C00066 00021 4.3 SWEEP COMMANDS.
C00069 00022 4.4 THE EULER COMMANDS.
C00073 00023 4.5 BODY INTERSECTION COMMANDS.
C00077 00024 4.6 CUT COMMANDS.
C00079 00025 5.0 INPUT/OUTPUT COMMANDS.
C00083 00026 6.0 EDITOR CONTROL COMMANDS.
C00085 00027 6.1 PROGRAM CONTROL.
C00089 00028 6.3 BODY NAMING AND RETRIEVING.
C00093 00029 6.5 LINK FOLLOWING COMMANDS.
C00099 00030 7.0 DISPLAY CONTROL COMMANDS.
C00102 00031 7.1 STATUS DISPLAY.
C00106 00032 7.2 HELP DISPLAY.
C00109 00033 7.4 EDGE DISPLAY BITS.
C00113 00034 8.0 FILE FORMATS.
C00118 00035 9.0 COMMAND SUMMARY BY LEXICAL ORDER.
C00128 ENDMK
C⊗;
STANFORD ARTIFICIAL INTELLIGENCE LABORATORY MARCH 1974
SAILON NUMBER 68. GEOMED DOCUMENTATION
MEMO AIM-XXX
COMPUTER SCIENCE DEPARTMENT REPORT NO. CS-XXX
GEOMED - GEOMETRIC EDITOR.
Bruce g. Baumgart
ABSTRACT:
GEOMED is a system for doing 3-D geometric modeling; used
from a keyboard, it is an interactive drawing program; used as a
package of SAIL or LISP accessible subroutines, it is a graphics
language. With GEOMED, arbitrary polyhedra can be contructed; moved
about and viewed in perspective with hidden lines eliminated. In
addition to polyhedra, camera and image models are provided so that
simulators relevant to computer vision, problem solving, and
animation may be constructed.
---------------------------------------------------------------------
This research was supported in part by the Advanced Research
Projects Agency of the Office of the Secretary of Defense under
Contract DAHC15-73-C-0435
The views and conclusions contained in this document are those of
the author and should not be interpreted as necessarily representing
the official policies, either expressed or implied, of the Advanced
Research Projects Agency or the United States Government.
---------------------------------------------------------------------
0.0 CONTENTS.
PART I - GEOMED AS AN INTERACTIVE DRAWING PROGRAM.
1.0 PRIMER.
2.0 EXAMPLES.
3.0 GEOMETRIC COMMANDS.
4.0 TOPOLOGICAL COMMANDS.
5.0 INPUT/OUTPUT COMMANDS.
6.0 EDITOR CONTROL COMMANDS.
7.0 DISPLAY CONTROL COMMANDS.
8.0 FILE FORMATS.
9.0 COMMAND SUMMARY BY LEXICAL ORDER.
PART II - GEOMED AS A SAIL OR LISP ACCESSIBLE GRAPHICS COMMAND LANGUAGE.
1.0 A SIMPLE EXAMPLE.
2.0 LINK AND DATUM ACCESSING.
3.0 WINGED EDGE PRIMITIVES.
4.0 EULER MAKE PRIMITIVES.
5.0 EULER KILL PRIMITIVES.
6.0 EASY POLYHEDRON ROUTINES.
7.0 EUCLIDEAN TRANSFORMATIONS.
8.0 GEOMETRIC MEASURE ROUTINES.
9.0 BODY INTERSECTION AND CUTTING.
10.0 IMAGE FORMATION ROUTINES.
11.0 INPUT/OUTPUT ROUTINES.
12.0 AUXILLARY ROUTINES: III DISPLAY AND ARITHMETIC.
PART III - INTERNAL GEOMED DOCUMENTATION.
1.0 DESCRIPTION OF SOURCE FILES.
2.0 HOW TO ASSEMBLE AND LOAD GEOMED.
3.0 HOW TO ASSEMBLE AND LOAD GEOMES.
4.0 HOW TO ASSEMBLE AND LOAD GEOMEL.
5.0 SUBROUTINE CALLING CONVENTION.
1.0 PRIMER.
1.1 Purpose.
GEOMED is for making drawings, synthetic video images, and
3-D geometric models for the sake of computer vision.
1.2 Running GEOMED.
The system copy of GEOMED is started by typing "R GEOMED"
carriage return at a III display console. The program will display a
rectangle, type an asterisk and await single character commands.
Typing carriage returns will yield more asterisks showing that GEOMED
is alive and listening.
1.3 Instant Cube.
Typing the character "∞", calls a macro that makes a cube.
Adjust the pots on the III so that the cube looks right.
1.4 Translation.
Type the character ":" to move the cube right (positive x axis).
Type the character ";" to move the cube left (negative x axis).
Type the character ")" to move the cube up (positive y axis).
Type the character "(" to move the cube down (negative y axis).
Type the character "*" to move the cube nearer (positive z axis).
Type the character "-" to move the cube away (negative z axis).
Clearly these command characters are not mnemonics, they
were chosen because they do not require the TOP key and are
conveniently grouped in pairs under one's right hand.
1.5 Strength of Translation.
The distance the cube is moved on each command is called the
strength of translation or TDEL. The value of TDEL is displayed in
the upper right corner of the screen and is initially one foot. The
strength of translation is halved by typing the command character "/"
or doubled by typing "\".
1.6 World Frame of Reference.
The direction the cube moved was with respect to the world
frame of reference which is a right handed coordinate system. The
initial camera is positioned looking down the Z axis at the world
origin. The world origin is in the center of the display screen a
simulated sixteen feet away; and the positive world X axis is to your
right; and the positive world Y axis is upwards.
1.7 Control, Meta, and Meta-Control Keys.
Notice that the Stanford A.I. keyboard has four "shift" keys
labeled SHIFT, TOP, META & CONTROL. SHIFT only determines whether an
alphabetic letters is upper or lower case; GEOMED converts lower case
letters into upper so that the SHIFT key has no effect. The TOP key
allows two ASCII character codes to be on each physical key, this
doubling up on the physical keys is not important to GEOMED since
"TOP-E" can always be referred to as "@". Finally, of great
importance, the CONTROL and META keys add two extra bits to the 7-bit
ASCII code, so that a 9-bit character is formed. In this document
the characters "α", "β" and "ε" will be used as prefix abbreviations
for CONTROL, META and META-CONTROL keying of a character.
Furthermore, the command scanner accepts the characters "α", "β"
and "ε" as prefix modifiers that will add the appropriate control and
meta bits to the next character typed.
1.8 Question Mark "?" Prefix.
Typing the question mark charcter "?" followed by any
character will type a one line reminder of what commands are invoked
by that character.
1.9 Rotation.
The rotation command characters are the same as for
translation except you must hold the CONTROL key down or prefix the
command with an "α". Try rotating the instant cube about the X-axis
with "α:". The positive direction of rotation is counter-clockwise.
The negative direction of rotation is clockwise.
1.10 Strength of Rotation.
The strength of rotation is named RDEL, the value of RDEL is
displayed in two formats in the upper right hand corner of the
screen: as a pi fraction and in degrees, minutes, seconds. The
initial value of RDEL is π/4, 45 degrees. Analogous to translation,
the strength of rotation is halved or doubled by "α/" and "α\"
respectively.
1.11 Rotation Default.
Since a sequence of rotations is quite common, there is a way
to make the CTRL key be sticky. The usual Euclidean transformation
default is translation world frame; but after typing the "@" command
character, the Euclidean default is rotation world frame. Translation
default is restored by typing "!". The state of the Euclidean
transformation default is also displayed in the status in the upper
right hand corner of the screen. (The "≡" command disables the status
display, "≡" toggles).
1.12 The Extended Command Scanner.
X-commands are executed by typing "X" followed by the first
three letters of a mnemonic (further letters are ignored) followed by
any necessary arguments. The command is terminated by a RETURN. The
arguments may be separated by any reasonible delimiters: space,
comma, etc. The following three "X" commands provide easy creation
of simple polyhedra:
X CUBE <DX width>,<DY height>,<DZ depth>
X BALL <radius>,<M longitudes>,<N latitudes>
X CYLN <radius>,<N sides>,<DZ length>
The CUBE command makes a right rectangular prism with width
height and depth as given. The BALL command makes a polyhedron that
approximates a sphere. The CYLN command makes a right prism that
approximates a circular cylinder.
1.13 The Stack.
GEOMED commands take their arguments from and leave their
results in a push down stack of bodies, faces, edges and vertices.
The contents of the stack are displayed on the left hand side of the
III screen. Having made a cube, you will have a B1 in the stack;
making a second cube will push a B2 into the stack. To retrieve B1
use the "↑" stack pop or the "α↑" stack rotate up or "α↓" stack
rotate down or "↔" the swap top of stack command. The "↓" command
pushs the stack down and places in the new top the entity that was
previously top of stack.
1.14 The Face, Edge and Vertex Rings.
A polyhedron consists of three circular double linked lists
(called rings); there is a ring of faces, a ring of edges and a ring
of vertices. The head of each ring is the body node. The rings can be
traveled by using the commands "<" and ">" to go forwards and back
thru the face ring, the commands "≤" and "≥" for the edge ring, and
the commands "∨" and "∧" for the vertex ring. Notice that when a
face, edge or vertex node is in the top of the stack the
corresponding entity is intensified in the drawing.
1.15 Hidden Line Elimination.
Hit the ALT-MODE key in order to see your drawing with its
hidden lines eliminated. To stay in hidden line display mode use the
"_" underbar command; the "β_" returns the display mode default to
display all the lines. The hidden line eliminator, named OCCULT, does
not apreciate overlapping polyhedra or concave faces; and for the
sake of speed it does not check for these cases. The faces of a
polyhedra can be forced convex by applying the "$" command to a body
or a face.
1.16 Parts Tree Structure - The Attach and Detach Commands.
Each body represents a single simply connected Euler
polyhedron of faces, edges and vertices. The parts' tree commands "A"
ATTACH and and "D" DETACH, allow bodies to be connected into a tree
structure without affecting their faces, edges or vertices. The "A"
attach command links the body in the top of the stack to the body in
the second stack position as a sub-part (or child). The detach
command unlinks a body from its parent. Certain operations such as
the Euclidean transformations apply to a body and all its
descendents. The section on link following describes how the parts
tree may be traveled using the "∩" DAD link, "∪" SON link, "⊂" BRO
link and "⊃" SIS link commands.
1.17 Making a Cube Explicitly.
After "∞" and "X CUBE", a third way to draw a cube will be
given to illustrate the primitive topology commands. Starting with a
fresh copy of GEOMED, type the command letters in the second column
to get the advertised results:
1. V Vertex body creation.
2. :) Position the vertex into the first quadrant.
3. S;; Make an edge and vertex and move left.
4. S(( Edge vertex down.
5. S:: Edge vertex right.
6. J↑ Join the first and last vertices of the wire.
7. * Pull the face lamina towards you.
8. S Sweep the square face into a very thin solid.
9. --↑ Move the face away from you giving the cube depth.
10. @/):! Rotate the cube to a more familiar position.
Three commands that have not been mentioned yet are:
"V" Vertex Body Creation.
"S" Sweep.
"J" Join two vertices with a new edge.
The "V" command takes no arguments and pushs a brand new
body, face and vertex into the stack. This degenerate point
polyhedron satisfies the Euler equation F-E+V=2 (1-0+1=2) and is
always placed at the world origin. The first three sweep commands in
the example, sweep a vertex polyhedron into a wire polyhedron by
adding a new vertex and a new edge; incidentally preserving Euler's
equation as do all GEOMED commands. The wire-sweep takes a Vertex
argument, and returns the new vertex. The new vertex has the same
locus as the argument vertex. After three sides of a square have been
formed, the "J" command creates a new face and a new edge between
the first and last vertex of the wire face. The wire-join case of
the "J" command takes a vertex argument and identifies it as the end
of a wire and knows enough to fetch the other end of that wire, as
its second argument.
1.18 Text Commands of GEOMED 1973.
Towards the end of 1973, text nodes and text commands were
added to GEOMMD to demonstrate its potential value for mechanical
drawing. This work was primarily done by Tovar Mock, and the
resulting alternate version of GEOMED is available on the system as
the program named "G".
Text nodes were created (or edited) by applying the "T"
command with a vertex in the top of stack close to where the text
label is desired. The header of a text node list is called a Y-node
and can be reached from a text node by the "←" command; Y-nodes carry
their own 3-D space locus and so can be moved about using the
Euclidean transformation. The resulting data structures could only be
save and restored by means of the "εO" and "εI" dump and restore D3D
file. A kind of I/O that doesn't exist in present GEOMED. The "T"
command, accepts text by means of an editor resembling the system's
editors TV and E; and using the system line edit commands. The
additional line edit mode commands are:
<CR> Forward 1 line
<VT> Backward 1 line
αε> Forward 4 lines
αε< Backward 4 lines
αε≥ Forward 16 lines
αε≤ Backward 16 lines
εD Delete a line
εI Enter line insert mode
αZ Concatenate next line with current line
αεE Return to GEOMED
αεV Update display
αε/ Shrink III character size.
αε\ Expand III character size.
The best way to get a labeled drawing into hardcopy is to "P"
plot is out of G into a plot file, ".PLT"; and then to use PLTVEC to
output the drawing on the Cal Comp Plotter or to use XAP to output
the drawing to the XGP, Xerox Graphics Printer. See section 5.2 below
for details on how to make hardcopy drawings.
2.0 EXAMPLES.
The examples can be used as exercises in two ways: the
energetic reader can glance at the figures and attempt to reproduce
the results on his own; the casual reader can copy the answers into
the computer and follow the action a step at a time. In either event
the reader should be looking ahead into sections 3 through 7 for
commands that have not been explained in the primer.
2.1 Jack.
2.2 Torus.
2.3 Soma Cubes.
2.4 The Platonic Solids.
2.5 Knot.
2.6 Wrench.
2.7 Pulgas water temple.
2.8 Room Interior.
2.9 Outdoors scene.
2.10 Stereo pairs.
2.11 Video Synthesis.
---------------------------------------------------------------------
2.1.1 Jack using face frame of reference.
XCUB 0.5 0.5 0.5
FF >S* >S* >S* >S* >S* >S* B
2.2.1 Torus.
V:@ First Vertex.
S*S*S* Seven more vertices.
S*S*S*S*
J↑ Form Lamina.
!\\: Position the lamina.
@S)S)S)S) Sweep the face around the Y-axis.
S)S)S)S)
↓>G↑ Glue the ends of the torus together.
2.2.2 Torus using iterated sweeps.
V:7@S*J Make lamina.
!↑8/:\@S) Sweep lamina into ring.
↓>G↑! Glue the ends.
2.3 Soma cubes
FFXCUB 1 1 1 Face frame & Core cube.
<S*<<<S*<S* Three face sweeps.
BNSOMA7 Name it.
FFXCUB 1 1 1
>>S*
>>>>S*
↓≥.+↑S*
BNSOMA6
FFXCUB 1 1 1
>S* >S* >S*
BNSOMA3
FFXCUB 1 1 1
<S* <S*
↓≥.+↑ S*
BNSOMA4
FFXCUB 1 1 1
>S* >>S*
BNSOMA1
The Platonic Solids.
Regular Tetrahedron
XCUB 1 1 1
∧↓∧∧↓B ∨↓∨∨ Push opposing vertices into the stack,
SK↑SK↑SK↑KB Lop off the opposing vertices.
Another Regular Tetrahedron
XCYL 6 3 9 Three sided cylinder
>KB Pyramid one of the ends.
Regular Octahedron
XCUB 1 1 1
βD Face-Vertex Dual of a cube
2.7 Pulgas Water Temple.
V:λ5 Foundation of temple.
S:λ0.2
S)S;;S)S;;S)Sλ3 Jaggies forming steps.
;↑π40'
8@S)R↑¬λ3.61 Sweep out a solid of rotation.
!(
!Vλ0.6
:S)))S;;S(((J Make rectangular lamina
↑λ3.5
:π40'
9@S)↓>G↑/) Sweep lamina to form top of the temple.
!λ2.72
)
XCYL 0.5 9 6 Make column,
@9:!λ3.5 position column.
>Aβ9β(<:π20' Taper the top of the column.
Q@)\
C)C)C)C) Make eight copies of the column,
C)C)C)C)
3.0 GEOMETRIC COMMANDS
3.1 EUCLIDEAN TRANSFORMATION KEYS.
Translation, α Rotation, β Dilation, ε Reflection.
";" Transform Minus X-Axis. ":" ...Plus X-Axis.
"(" Transform Minus Y-Axis. ")" ...Plus Y-Axis.
"-" Transform Minus Z-Axis. "*" ...Plus Z-Axis.
"!" Translation Default. "@" Rotation Default.
3.2 STRENGTHS OF TRANSFORMATION.
3.2.1 "/" Halve a Transformation Strength.
"\" Double a Transformation Strength.
3.2.2 "λ<expr>" Set Translation Strength, TDEL.
"π<expr>" Set Rotation Strength, RDEL.
"%<expr>" Set Dilation Strength, DDEL.
3.2.3 "<digit>" Set Transform Strength Immediate.
3.3 EUCLIDEAN SWITCHES.
3.3.1 "F" Step Frame Switch Forwards.
"βF" Step Frame Switch Backwards.
3.3.2 "Q" Toggle Frame Origin Switch.
3.3.3 "βA" Step Axis Counter.
3.3.4 "∀" Enable All Body Motions.
"α∀" Disable Frame Motion.
"β∀" Disable Vertex Motion.
"ε∀" Disable Parts Motion.
3.4 THE ITERATION COUNTER.
"<digit>" Accumulate Iteration Count.
"<return>" Reset Iteration Count to Zero.
3.5 DIRECT EUCLIDEAN COMMANDS.
3.5.1 "U" Unmove a Body.
3.5.2 "X PLACE <X> <Y> <Z>"
3.5.3 "X ORIENT <PAN> <TILT> <SWING>"
3.1 EUCLIDEAN TRANSFORMATIONS.
Translation, α Rotation, β Dilation, ε Reflection.
";" Transform Minus X-Axis. ":" ...Plus X-Axis.
"(" Transform Minus Y-Axis. ")" ...Plus Y-Axis.
"-" Transform Minus Z-Axis. "*" ...Plus Z-Axis.
"!" Translation Default. "@" Rotation Default.
The Euclidean geometric transformations are translation,
rotation, dilation and reflection. The entity in the top of the stack
is transformed by typing one of the six characters: colon, semicolon,
left parenthesis, right parenthesis, minus sign or asterisk. The
characters colon, left parenthesis and minus sign transform the
object in the negative direction with respect to the X-axis, the
Y-axis and the Z-axis respectively. The characters semicolon, right
parenthesis and asterisk transform the object in the negative
direction with respect to the X-axis, the Y-axis and the Z-axis
respectively. The particular transformation is selected by keying the
control bits: none, control, meta and meta-control which
respectively select translation, rotation, dilation and reflection.
Finally, the no control bits case can be forced to be rotation by the
"@" rotation default command, or translation by the "!" translation
default command.
Translation moves the top entity in the stack in the
direction specified by one unit of translation strength, TDEL.
Rotation rotates the entity about the axis specified by one unit of
rotational strength, RDEL. Positive rotations are counter clockwise
and negative rotations are clockwise.
Dilations and reflections refer to a three axis count
selector. State 1 causes dilation (reflection) to be done on the
specified axis, dilation state 2 causes dilation (reflection) on the
two axes not indicated, and state 3 causes dilation (relfection) on
all the axes. The axis count selector is advanced by typing "βA". The
state of the selector is displayed as a digit 1, 2 or 3 just to the
right of the dilation strength's per cent sign in the editor status
display at the upper right of the III screen.
When the dilation strength, DDEL, is less than 100% a
positive dilation will scale the entity by 1/DDEL and a negative
dilation will scale the entity by DDEL. Positive and negative keyings
make no difference in the execution of a reflection.
3.2 STRENGTHS OF TRANSFORMATION.
3.2.1 "/" Halve a Transformation Strength.
"\" Double a Transformation Strength.
The strength of a Euclidean transformation can be halved or
doubled by keying the transform's control bits and by striking slash
or back slash respectively.
3.2.2 "λ<real expression>" Set Translation Strength, TDEL.
"π<real expression>" Set Rotation Strength, RDEL.
"%<real expression>" Set Dilation Strength, DDEL.
The strengths of the Euclidean transformations can be entered
numerically by typing "λ", "π" or "%" followed by an arithmetic
expression of numerical constants. The simple expression scanner can
take "+", "-", "*", "/" and parenthesis in the usual precedence
order; the scanner also evaluates the pi character, "π", to
3.1415927; numbers suffixed with the inch mark double quote """ are
divided by twelve; number suffixed with a left single quote "`" are
multiplied by 1.745329E-2 which tends to convert degrees into
radians.
3.2.3 "<digits>" Set Transform Strength Immediate.
The strength of a Euclidean transformation can be set by
keying the Transform's control bits and by striking a digit from zero
to nine. Keying "ε<digit>" sets the strength of translation; a digit
without meta-control bits contributes to the iteration count. For
Translation: "ε0" sets TDEL to 1/16 of a foot, "ε4" sets TDEL to one
Foot, and "ε9" sets TDEL to 32 Feet. That is ε<digit> sets TDEL to
2.0↑(<digit>-4) feet. For Rotation: "α9" sets RDEL to π/2, "α8" sets
RDEL to π/4, and so on. For Dilation: "β1" sets DDEL to 10%, "β2"
sets DDEL to 20% and so on.
3.3 EUCLIDEAN SWITCHES.
3.3.1 "F" Step frame switch forwards.
"βF" Step frame switch backwards.
There are four frames of reference: world frame, body frame,
relative frame and camera frame. The world frame is that in which all
coordinates are stored; the world frame is the natural direct frame
of reference, all the other frames are represented in world frame
coordinates by a frame node which contains the origin location and
axes orientation of secondary frames. In particular, each body and
camera has a frame node, which determine a camera or a body frame of
reference that translates and rotates when Euclidean transformations
are applied to that body or camera. The relative frame mode is a
catch all; when a body is in the top of the stack, its relative frame
is that of the body of which it is a part; when a face is in the top
of the stack, its relative frame is a special face frame with Z-axis
parallel to the face's outward pointing normal. The "F" command steps
the frame switch selector forwards, "βF" steps the frame switch
selector backwards. The state of the frame switch selector is
displayed in the status in the upper right of the III screen.
3.3.2 "Q" Toggle Frame Origin Switch.
Euclidean transformations in world frame can be done with
repect to the world origin or with repect to the origin of the body
being transformed depending on the state of the FRMORG switch. In
particular, FRMORG affects world frame rotations: FRMORG true causes
rotation about a world axis thru the world origin; FRMORG false
causes rotation about an axis parallel to a world axis, but passing
thru the body origin. The FRMORG switch is flipped by the "Q"
command. The state of FRMORG is indicated by an asterisked in the
status display; the asterisk is present when FRMORG is true and
absent when FRMORG is false.
3.3.3 "βA" Step Axis Counter.
The three state switch named AXECNT affects dilations and
reflections. State-1 indicates dilation (reflection) only on the
specified axis. State-2 indicates dilation (reflection) on the two
axes not specified. State-3 indicates dilation (reflection) on all
three axes. The state of the AXECNT switch is indicated by a digit to
the right of the dilation strength's percent sign in the status
display. AXECNT is cycled forward by the "βA" command.
3.3.4 "∀" Enable All Body Motions.
"α∀" Disable Frame Motion.
"β∀" Disable Vertex Motion.
"ε∀" Disable Parts Motion.
A Euclidean transformation applied to a body, means applying
the tranform to the vertices, frame and parts of that body. Each of
these three phases of body transformation can be individually
disabled by the "∀" command with the appropriate conbination of
meta-control bits. With no meta-control bits, the ∀" command resets
all the body disable bits. Transforming a fully diabled body is a no
operation.
3.4 THE ITERATION COUNTER.
"<digit>" Accumulate Iteration Count.
"<return>" Reset Iteration Count to Zero.
Digits typed without control keys are accumulated into an
iteration counter. The iteration counter is cleared by typing a
carriage return. The iteration counter applies to Euclidean
transformation and some kinds of sweeps. The ability to iterate and
to do macros is not developed because of the existence of GEOMED
imbedded in LISP which provides better interactive programming
facilities than would be possible under the present GEOMED command
scanner. (Inspite of theoretical equivalences, it has been my design
goal to keep interactive editing distinct from interactive
programming).
---------------------------------------------------------------------
3.5 DIRECT EUCLIDEAN COMMANDS.
3.5.1 "U" Unmove a Body.
This command applies the inverse of the given body's frame of
reference to the body itself. This has the effect of undoing any
translations and rotations that have been applied to the body; that
is the body's frame is brought back to be coincident with the world
frame of reference. Thus a polyhedral body can be constructed in a
standard orientation; then rotated randomly for inspection; and then
be brought back to it original orientation for further editing.
3.5.2 "X PLACE <X> <Y> <Z>"
The location of the body, camera or vertex in the top of the
stack is placed at the given world coordinates.
3.5.3 "X ORIENT <PAN> <TILT> <S.WING>"
The orientation of the given body or camera is set to the
specified values.
4.0 TOPOLOGICAL COMMANDS.
4.1 EASY CREATIONS.
4.1.1 "∞" Instant Cube.
4.1.2 "α∞" Instant Torus.
4.1.3 "X CUBE <DX> <DY> <DZ>"
4.1.4 "X CYLN <RADIUS> <N-SIDES> <DZ>"
4.1.5 "X BALL <RADIUS> <M-LONGITUDES> <N-LATITUDES>"
4.2 COPY,KILL AND DUAL.
4.2.1 "C" Copy.
4.2.2 "K" Kill.
4.2.3 "αK" Edge-Vertex Kill.
4.2.4 "βD" Dual.
4.3 SWEEP COMMANDS.
4.3.1 "S" Sweep
4.3.2 "αS" Pyramid.
4.3.3 "R" Rotation Solid Completion.
4.3.4 "X SILOUETTE <ZMIN> <ZMAX>"
4.4 THE EULER COMMANDS.
4.4.1 "V" Make Vertex Body.
4.4.2 "E" Make Edge and Vertex.
4.4.3 "M" Midpoint an Edge.
4.4.4 "J" Join Vertices.
4.4.5 "G" Glue Faces.
4.5 BODY INTERSECTION COMMANDS.
4.5.1 "α∩" Body Intersection.
4.5.2 "α∪" Body Union.
4.5.3 "α¬" Body Subtraction.
4.5.4 "¬" Evert Body Surface Orientation.
4.5.5 "|" Invert Edge Linear Orientation.
4.5.6 "$" Make Convex.
4.5.7 "α$" Edge Slurp.
4.6 CUT COMMANDS.
"X CUT <X> <Y> <Z>" Cut Bodies, Faces and Edges.
"αX CUT <X> <Y> <Z>" Cut Faces and Edges.
"βX CUT <X> <Y> <Z>" Cut Edges.
"εX CUT" Kill Temporaries (Uncut).
4.7 PARTS TREE COMMANDS.
4.7.1 "A" Attach.
4.7.2 "D" Detach.
4.1 EASY CREATIONS.
4.1.1 "∞" Instant Cube.
The instant cube command places a command string for making a
particular cube into the teletype buffer. The purpose of this command
is to make an object for demonstation.
4.1.2 "α∞" Instant Torus.
The instant torus command places a command string for making a
particular torus into the teletype buffer. The purpose of this command
is to make a demonstation object.
4.1.3 "X CUBE <DX> <DY> <DZ>"
The CUBE command makes a right rectangular prism with width
height and depth as given in the three arguments. The body node of
the cube is pushed into the stack, and the cube is located at the
world origin. The absolute value of the arguments is taken so that
the cube is always solid. A zero <DZ> returns a rectangular lamina
rather than a cube.
4.1.4 "X CYLN <RADIUS> <N-SIDES> <DZ>"
The CYLN makes a right prism that approximates a circular
cylinder. A zero <DZ> argument returns a circular lamina rather than
a cylinder. The <N-sides> argument is forced to be at least three.
4.1.5 "X BALL <RADIUS> <M-LONGITUDES> <N-LATITUDES>"
The BALL command makes a polyhedron that approximates a
sphere. The <M-Longitudes> and <N-Latitudes> are forced to be at
least three and two respectively.
4.2 COPY, KILL AND DUAL.
4.2.1 "C" Copy.
Copy whatever is in the top of the stack in a reasonible
manner and push it down. Copy of a bodies includes all the parts of
that body. Copy of a face, creates a two faced body lamina coincident
with the given face.
4.2.2 "K" Kill.
This command takes the top body, face, edge or vertex and
attempts to delete it in a reasonable manner. Kill of a body deletes
it and all its parts. Kill of a face removes the given face and all
its edges and vertices but one vertex, which is placed in the center
of the given face and is returned to the stack. Kill of an edge
removes the given edge and its negative face, NFACE(E). Kill of a
vertex removes the vertex and all its edges and faces but one face,
which is returned to the stack. The kill operation is not defined in
cases which would leave one sided faces or dangling edges; however
the necessary trihedral restrictions are not imposed so that certain
illegal kills are possible and other illegal kills are fatal.
4.2.3 "αK" Edge-Vertex Kill.
The "αK" kill of an edge removes the edge and its negative
vertex, NVT(E); the positive vertex, PVT(E), is position in the
center of the edge and returned to the stack.
4.2.4 "βD" Dual.
The "βD" command makes the face/vertex dual of a body; that
is all the faces become vertices and all the vertices become faces.
This command will turn dodecahedrons into icosahedrons; (or jacks
into horny octahedrons) as illustrated below.
4.3 SWEEP COMMANDS.
4.3.1 "S" Sweep.
"βS" Sweep Cylinder, Edges Not Sharp."
This command sweeps a face into either a sheet or a solid
depending on the NCNT. If the NCNT is zero, then SWEEP returns a new
face coincident with the given face and connected to it by new sweep
edges and rectangular sweep faces forming a prism. When the NCNT is
non-zero, only the first NCNT edges of the argument face's perimeter
are swept into new faces. Thus NCNT new faces are created and the
argument face is returned somewhat more complicated than before.
4.3.2 "αS" Sweep Pyramid.
"εS" Sweep Pyramid, Edges Not Sharp.
Given a face, "αS" will creat a peak vertex and place it in
the center of the face connected by an edge to each of the faces
vertices. The peak vertex is returned to the stack. Given a vertex,
the pyramid command forces all the faces of that vertex to be
triangular.
4.3.3 "R" Rotation Solid Completion.
After a wire has been swept around, you have a shell of
rotation. To change a shell into a solid all that remains to be done
is do a series of J commands on the leading and lagging vertices of
the shell. The R command, using the NCNT to step around the pole
caps, calls the J-command for all the necessary pairs. The sweep face
is taken as an argument and nothing is returned.
4.3.4 "X SILOUETTE <ZMIN> <ZMAX>"
This command sweeps a silouette lamina body into a cone
between -<zmin> and -<zmax> on the Z-axis of the now camera. The
minus Z half space is the one that contains the objects visible from
the camera; that is the camera's principle ray is the minus Z-axis
ray.
4.4 THE EULER COMMANDS.
4.4.1 "V" Make Vertex Body.
"βV" Make Body node.
This command creates a polyhedron consisting of one vertex
and one face. The vertex is placed at the world origin. The V
command takes no arguments and leaves the new body, face and vertex
on the stack with the vertex on top. The "βV" command will make a
naked body nude, that is a body with no faces, edges or vertices.
4.4.2 "E" Make Edge and Vertex.
This command creates a new edge and a new vertex starting
from an old vertex. The E command requires two arguments, the top
argument is the old vertex and the second argument must be one of the
faces to which the vertex belongs. The new edge and vertex become
associated with the given face.
4.4.3 "M" Midpoint an Edge.
This command takes an edge argument and creats a new edge and
a new vertex. The new mid vertex is positioned along the edge in
proportion to the value of DDEL. Type the commands "ε5M" in order to
make a midpoint that is geometrically in the middle of the given
edge.
4.4.4 "J" Join Vertices.
This command creates a new face and a new edge. The "J"
command has two forms. The general form of the "J" command expects
two vertices of the same face to be given on the top of the stack,
and it returns in their place a new edge and a new face with the edge
on top. The wire form of the "J" command applies only to a face that
doesn't have a closed perimeter. The wire "J" returns the other end
of the wire in top and leaves the second argument unchanged.
4.4.5 "G" Glue Faces.
This command takes two faces from the top of the stack. The
faces should be of opposite orientation, they should have the same
number of vertices and the vertices should be nearly coincidant. The
two faces are deleted along with all the edges and vertices of the
second one of them. If there were two bodies before, then one will
remain; whereas a body glued to itself forms a hole (or handle)
yielding a polyhedral surface of genus one greater than before. In
either case, the glue faces command returns the body of the faces so
formed.
4.5 BODY INTERSECTION COMMANDS.
4.5.1 "α∩" Body Intersection.
Given two different bodies from the top of the stack, if the
intersection of the space enclosed by their surfaces is not empty a
new polyhedron will be formed to represent the surface of the space
of intersection; and the given bodies will be killed.
4.5.2 "α∪" Body Union.
Given two different bodies from the top of the stack, if the
union of the space enclosed by their surfaces is simply connected
(that is al'e de Morgan: the intersection of the space enclosed by
their surfaces is not empty); then a new polyhedron will be created
representing the surface of the union of the enclosed spaces of the
given bodies. The given bodies will be killed.
4.5.3 "α¬" Body Subtraction.
Subtract the top of the stack body from the body second in
the stack. Where subtraction means union of the evert of the top body
with the second body.
4.5.4 "¬" Evert Body Surface Orientation.
GEOMED polyhedra have an inside and an outside irrespective
of enclosing a finite volume; that is a thing that appears to be a
cube can either be a solid in space or a space in a solid. The EVERT
command turns solids into holes and holes into solids.
4.5.5 "|" Invert Edge Linear Orientation.
Edges are directed vectors with a negative vertex and a
positive vertex. The "|" command flips the linear orientation of the
edge by swapping the edges vertices, faces and wings.
4.5.6 "$" Make Convex.
This command may be applied to a face or a body. All the
faces referred to will be split into triangles.
4.5.7 "α$" Edge Slurp.
This command will attempt to remove or darken the visually
unaesthetic edges that arise from the "Make Convex" command. The
edges slurp are the one with dihedral angle of almost pi, and with
wing angles that sum to less than pi at each vertex.
4.6 CUT COMMANDS.
"X CUT <X> <Y> <Z>" Cut Bodies, Faces and Edges.
"αX CUT <X> <Y> <Z>" Cut Faces and Edges.
"βX CUT <X> <Y> <Z>" Cut Edges.
"εX CUT" Kill Temporaries (Uncut).
The cut command argument specifies a cutting plane in terms
of a vector from the world origin; the direction of the vector is
normal to the desired plane, the magnitude of the vector is the
distance of the origin from the desired plane.
4.7 PARTS TREE COMMANDS.
4.7.1 "A" ATTACH
This command attachs the body in the top of the stack as a
part to the body second in the stack. If the first two entities are
not bodies then this command is a no operation. Because of the
implementation, the parts structure is always kept a tree,
circularities and incest are prevented.
4.7.2 "D" DETACH
Detachs a part from its parent; applies to bodies only.
5.0 INPUT/OUTPUT COMMANDS.
"I" input B3D file. "O" output B3D file.
"αI" input CAM file. "αO" output CAM file.
"βI" input CRE film. "βO" output V2D file.
"εI" input GEM file. "εO" output GEM file.
"βZ" take commands from GEO file.
"P" output PLT file of current III buffer.
5.1 I/O COMMANDS.
The "I" and "O" are the commands for input and output. There
are two file formats for polyhedra named B3D and GEM. The plain "O"
command will output a body (and all its parts) from the top of the
stack into a B3D file. The plain "I" command will input a body (and
all its parts) from a B3D file and will push it on the stack. The
"αI" and "αO" input and output CAM files to and from the node of the
"now" camera. The "βI" inputs a CRE film and places a film of
perceived CRE images on the "now"-camera's node. The "βO" command is
for outputing a V2D file (vectors 2-D) for the sake of MKVID (make
video) which does the scan line conversion for synthesizing video
images. The "εI" and "εO" commands read and write more of the
contents of each body, face, edge and vertex for the sake of GEOMES
(SAIL) and GEOMEL (LISP) users. Specifically words 0 and 8 of each
node is included in the GEM format.
5.2 PLOT FILE HARDCOPY; PLTVEC AND XAP.
The are two online hardcopy plotting devices: the XGP and the
Cal Comp plotter. A plot file (which is a III buffer) can be plotted
on the Cal Comp by running the program PLTVEC. PLTVEC first asks for
point vector default: REGULAR, DASHED or VECTOR; type the letter "R"
or just type a carriage return. Next PLTVEC ask for a scale size;
type a real number between 0.1 and 2.5; a scale 1.0 will yield a plot
approximately the size of the physical III screen, 10 inchs on a
side. Next PLTVEC asks for the plot file name, after which the plot
begins. When the plot is completed, the question "move pen" appears
and can be answered with the letters "L" for left, "R" for right,
"U" for up and "D" for down.
5.3 VIDEO IMAGES; MKVID AND CRE.
6.0 EDITOR CONTROL COMMANDS.
6.1 PROGRAM CONTROL.
6.1.1 "εE" Exit GEOMED.
6.1.2 "α#" Enter DDT.
6.2 STACK COMMANDS.
6.2.1. "↔" Swap First and Second Elements of Stack.
"α↔" Swap First and Third Elements of Stack.
"β↔" Swap First and Last Elements of Stack.
"ε↔" Swap Second and Third Elements of Stack.
6.2.2 "↓" Duplicate Push Stack Down.
"↑" Discard Pop Stack.
6.2.3 "α↓" Rotate the Stack Down.
"α↑" Rotate the Stack Up.
6.2.4 "⊗" Push Universe Node into the Stack.
"αC" Push the Now Camera into the Stack.
6.3 BODY NAMING AND RETRIEVING.
6.3.1 "N" Name Body.
6.3.2 "B" Body Get.
6.3.3 "αB" Body Retrieval by Name or by Numeral.
6.4 FACE AND VERTEX PERIMETER TRAVELING.
"." Fetch Counter Clockwise.
"," Fetch Clockwise.
"+" Fetch Other.
"αV<n>" Fetch Nth Vertex of a Body.
6.5 LINK FOLLOWING COMMANDS.
"<" NFACE Link. ">" PFACE Link.
"≤" NED Link. "≥" PED Link.
"∨" NVT Link. "∧" PVT Link.
"∩" DAD Link. "∪" SON Link.
"⊂" BRO Link. "⊃" SIS Link.
"←" ALT Link. "→" ALT2 Link.
"," CW Link. "." CCW Link.
6.1 PROGRAM CONTROL.
6.1.1 "εE" Exit GEOMED.
Exit the GEOMED editor. Returns control to monitor level or
to user program level. When embedded, GEOMED returns the entity at
the top of its stack to its caller as its value.
6.1.2 "α#" Enter DDT.
Enters DDT if it exists. The SYS versions of GEOMED never
have DDT; the versions GEOMED.DMP[GEM,HE] and G.DMP[GEM,BGB] will
usually have DDT (which actually a Swinehart RAID); and a GEOMES core
image has DDT depending on how the compile and load was done. A DDT
"αP" command will continue execution in the GEOMED listen loop.
---------------------------------------------------------------------
6.2 STACK COMMANDS.
6.2.1 "↔" Swap First and Second Elements of the Stack.
"α↔" Swap First and Third Elements of the Stack.
"β↔" Swap First and Last Elements of the Stack.
"ε↔" Swap Second and Third Elements of the Stack.
GEOMED commands take their arguments from and leave their
results in a push down stack of bodies, faces, edges and vertices.
The contents of the stack are displayed on the left hand side of the
III screen. The swap commands exchange the indicated elements of the
stack if they exist. The stack can hold one hundred entities,
although only the top thirty elements will be displayed.
6.2.2 "↓" Duplicate Push Stack Down.
"↑" Discard Pop Stack.
The "↓" command push the stack down and places a duplicate of
the previous top of stack into the top of stack. The "↑" command pops
the stack discarding the top element.
6.2.3 "α↓" Rotate the Stack Down.
"α↑" Rotate the Stack Up.
The rotate stack commands preserve the number of elements in
the stack. Rotate down pushs the stack and moves the last element to
the top. The rotate up pop the stack and moves the previous top to
the bottom.
6.2.4 "⊗" Push Universe Node into the Stack.
"αC" Push the now camera into the Stack.
These two commands require no arguments, but merely push the
Universe node or the current camera into the stack, so that node
linking can be started. The command sequence "⊗∪" will push the first
world node into stack.
6.3 BODY NAMING AND RETRIEVING.
6.3.1 "N" Name Body.
This command accepts a string of up to ten characters typed
as a name for the body in the top of the stack; any characters can be
used in the name.
6.3.2 "B" Body Get.
This command will replace the edge, face, or vertex in the
top of the stack with the body to which it belongs.
6.3.3 "αB" Body Retrieval by Name or by Numeral.
Each body has a numeral corresponding to its position in its
world's body ring. The "αB" command will accept a name or numeral and
will push the indicated body into the stack.
---------------------------------------------------------------------
6.4 FACE AND VERTEX PERIMETER TRAVELING.
"." Fetch Next Edge Counter Clockwise about Face (Vertex).
"," Fetch Next Edge Clockwise about Face (Vertex).
"+" Fetch Other Face (Vertex) of the Edge.
"αV<n>" Fetch Nth Vertex of a Body.
"≥" Fetch First Edge of a Face or Vertex.
When the top two positions of the stack contain an edge and a
face (or an edge and a vertex) that are connected; then both are
intensified and face (vertex) perimeter traveling is possible using
the "," or the "." commands to obtain the next edge about the face
(vertex) from the given edge, going in the clockwise or counter
clockwise direction (as seen from the exterior surface of the
polyhedron). It is also possible while perimeter traveling to cross
to the other face (vertex) of the given edge by means of the "+"
command. Remember that whenever there is a face, edge or vertex in
the top of the stack, the body to which it belongs can be obtained by
using the "B" command. Mastering these commands alleviates the urge
to have a light pen; or to take prolonged trips around edge rings.
The "αV<n>" retrieves the Nth vertex around the body ring of the body
in the top of the stack; the vertex numerals are displayed when the
"αL" switch is toggled on. Trivia experts will be happy to know that
"α." and "α," fetch the next vertex (face), ccw and cw respectively,
from the current edge with respect to the current face (vertex).
6.5 LINK FOLLOWING COMMANDS.
The GEOMED data structure consists of twelve word nodes which
contain links and data. The following command characters fetch
particular links of the entity in the top of the stack:
WORD1: "<" NFACE Link. ">" PFACE Link.
WORD2: "≤" NED Link. "≥" PED Link.
WORD3: "∨" NVT Link. "∧" PVT Link.
WORD4: "∩" DAD Link. "∪" SON Link.
WORD5: "⊂" BRO Link. "⊃" SIS Link.
WORD6: "←" ALT Link. "→" ALT2 Link.
WORD7: "," CW Link. "." CCW Link.
The root of the data structure is the UNIVERSE node, which
is unique, and which can be pushed into the stack by executing the
"⊗" command. Directly accessible from the UNIVERSE node, are the
display ring and the world ring:
"∩" of the UNIVERSE returns the "now" WORLD.
"∪" of the UNIVERSE returns the "first" WORLD.
"." of the UNIVERSE returns the "now" display.
"," of the UNIVERSE returns the "first" display.
A display is not a node, but is rather a ring of windows. The
refresh subroutine GEODPY, refreshs the windows of the "now" display
ring.
"⊂" and "⊃" of a WINDOW travels the Window Ring of a display.
"." and "," of a WINDOW travels the Display Ring.
Each world has at least one camera, one sun, and a ring of bodies
(which is initially empty).
"←" of a WORLD returns the "first" SUN.
"∩" of a WORLD returns the "now" CAMERA.
"∪" of a WORLD returns the "first" CAMERA.
"." and "," of a WORLD travels the World's Body Ring.
"⊂" and "⊃" of a WORLD travels the World Ring of the UNIVERSE.
Each camera points back to the world to which it belongs "∪"; and
belongs to that world's camera ring , "⊂" and "⊃" ; and has
potentially two rings of images: the synthetic image ring, ".", of
images from the hidden line eliminator, OCCULT; and the perceived
image ring, ",", of images from the video edge finder, CRE.
A polyhedral surface is composed of faces, edges and
vertices. Each particular face, edge, or vertex belongs to one and
only one body; and in turn each body has a ring of faces, a ring of
edges and a ring of vertices:
"<" and ">" of a body travels the Face Ring of that body.
"≤" and "≥" of a body travels the Edge Ring of that body.
"∨" and "∧" of a body travels the Vertex Ring of that body.
When the "αL" switch is toggled ON, a numeral is displayed at
each vertex of the body in the top of the stack. The N'th vertex of a
body can be brought into the stack by typing "αV<n>". Besides
belonging to rings; vertices and faces have one additional link, the
PED or first edge link which points to one of the edges of the vertex
or face. The PED of a vertex or face in the top of the stack can be
obtained by typing "≥".
Besides belonging to an edge ring, each edges points at its
two faces, its two vertices and its four neighboring edges in each of
its two faces; these last four pointers are the so called "wings" of
the edge and are used to travel the perimeters of faces and vertices.
Thus with an edge in the top of the stack, either of its two faces or
two vertices can be obtained by typing one of the four characters
"<>∨∧" respectively.
The arcane link positions in words -3, -2 and -1 of a node
can be retrieved by the control "<>≤≥∨∧" respectively; while meta
"<>≤≥∨∧" will retrieve from words 6, 7 and 8. No important links are
stored in the arcane positions.
7.0 DISPLAY CONTROL COMMANDS.
7.1 STATUS DISPLAY.
7.1.1 "≡" Status Display Toggle.
"α≡" Toggle Now Window's Darken Bit.
"#" Clear the page printer.
7.1.2 "∂" Datum Display Toggle.
"α∂" Datum Format Toggle.
7.1.3 "L" Toggle FEV Lights Switch.
"αL" Toggle Body Lights Switch.
"βL" Toggle Frame Lights Switch.
7.2 HELP DISPLAY.
"?" Information Prefix.
"H" Help.
"αH" Unhelp.
7.3 DISPLAY MODES.
"space" Display Refresh, GEODPY.
"ALT" GEODPY with hidden lines eliminated.
"αALT" GEODPY with back side faces eliminated.
"βALT" GEODPY everything visible.
"εALT" GEODPY with OCCULT diagonostics.
"_" Sticky Alt.
"α_" Sticky αALT.
"β_" Sticky βALT.
"ε_" Sticky εALT.
7.4 EDGE DISPLAY BITS.
7.4.1 "αD" Darken.
"εD" Undarken.
7.4.2 "X NSHARP"
"X GOURAUD"
7.5 FACE COLORING.
"X COLOR 00RED 00GRN 00BLU 00ALB"
7.6 CAMERA COMMANDS.
"αC" Push now camera into the stack.
"βC" Make new camera.
"β}" Step now camera forwards.
"β{" Step now camera backwards.
"αF" Set Camera's Focal Plane distance.
7.7 WORLDS AND WINDOWS.
"W" Make Window in Now Display Ring.
"αW" Make Window in New Display Ring.
"βW" Make New World.
"{" and "}" Step Now Display.
"α{" and "α}" Step Now World.
7.8 IMAGE RINGS.
"αT" Make a Simulated Image Body.
"←" and "→" Step Perceived CRE Image Ring.
"α←" and "α→" Step Predicted OCCULT Image Ring.
7.1 STATUS DISPLAY.
The execution of nearly every GEOMED command is followed by
the two display refresh routines called GEODPY and STADPY. STADPY
refreshs the stack display, the editor status display, the node
contents display, and the top of stack brighteners called "the
lights" which are governed by the "L" command. GEODPY scans the "now"
display ring of the universe node, and refreshs a piece of glass for
each window having a camera.
7.1.1 "≡" Status Display Toggle.
"α≡" Toggle Now Window's Darken Bit.
"#" Clear the page printer.
The STADPY, status display is turned on and off by the "≡"
command. The "α≡" command will turn the window border on and off,
(that rectangle). The "#" command. types four form feeds, for
clearing the page printer of visible characters.
7.1.2 "∂" Datum Display Toggle.
"α∂" Datum Format Toggle.
The "∂" command causes the contents of the node at the top of
the stack to be displayed in the lower right hand corner of the
screen. Frame, body and camera nodes have a special display which
indicates their location and orientation; the special display format
can be toggled on and off by means of the "α∂" command. In the
regular format node display, the appropriate link following commands
for the different words of the node are indicated.
7.1.3 "L" Toggle FEV Lights Switch.
"αL" Toggle Body Lights Switch.
"βL" Toggle Frame Lights Switch.
When the "L" switch is on; faces, edges and vertices in the
top of the stack are intensified. When the "αL" switch is on,
numerals are displayed for all the vertices of the body in the top of
the stack. The vertex numerals can be used for obtaining a particular
vertex using the "εV" command. When the "βL" switch is on, three
vectors are displayed indicating the direction of the axes of the
current frame of reference; the vectors are labeled respectively by a
letter "X", "Y", or "Z" followed by a number between -1.0 and +1.0
indicating whether the vector is going away or coming towards the
current camera.
7.2 HELP DISPLAY.
"?" Information Prefix.
"H" Help.
"αH" Unhelp.
Typing a question mark "?" followed by any character will
type a one line reminder of what commands are invoked by that
character. The "H" command allows the user to read this document a
page at a time while using GEOMED. Help starts by displaying page-4
and waits for other desired page numbers; typing a carraige return
will exit the help with the display persisting, control carraige
return will exit the help with the display cleared. The "αH" command
clears the HELP display glass.
---------------------------------------------------------------------
7.3 DISPLAY MODES.
"space" Display Refresh, GEODPY.
"ALT" GEODPY with hidden lines eliminated.
"αALT" GEODPY with back side faces eliminated.
"βALT" GEODPY everything visible.
"εALT" GEODPY with OCCULT diagonostics.
"_" Sticky Alt.
"α_" Sticky αALT.
"β_" Sticky βALT.
"ε_" Sticky εALT.
There are two basic display modes: with and without the
hidden lines eliminated. Initially the display refresh displays all
the lines that are visible from the simulated cameras of the windows
of the now display ring. The "ALT" commands do one refresh in the
mode selected by the control bits. An easy hidden line elimination
takes less than a second; the hardest take up to thirty seconds. The
underbar commands, "_", make the selected display refresh mode
sticky, all refreshs are done in that mode until the next underbar.
The spacebar command redoes the last refresh.
7.4 EDGE DISPLAY BITS.
7.4.1 "αD" Darken.
"εD" Undarken.
Given a body or an edge in the top of the stack; these two
commands set or reset the darken bit all the specified edges.
Darkened edges will not be intensified by the display refresh.
7.4.2 "X NSHARP"
"X GOURAUD"
Given a body or an edge in the top of the stack; these two
extended scanner commands, set the "not sharp" and the "Gouraud" bits
respectively all the edges of the body or of the given edge. The two
bits specify different kinds of intensity smoothing to the "βO"
command. And the "not sharp" bit causes not sharp and not folded
edges to be not visible after an OCCULT hidden line elimination; all
of which yields line drawings with a rounded appearance.
---------------------------------------------------------------------
7.5 FACE COLORING.
"X COLOR <n>RED <n>GRN <n>BLU <n>ALB"
The coloring command sets the bytes of words 4 and 5 of
all the implied given faces. The <n> arguments represent percentage
values between 0 and 100; the argument must be suffixed by a letter
---------------------------------------------------------------------
7.6 CAMERA COMMANDS.
"αC" Push now camera into the stack.
"βC" Make new camera.
"β}" Step now camera forwards.
"β{" Step now camera backwards.
"αF" Set Camera's Focal Plane distance.
The "αF<distance>" command will set the now camera's focal
plane distance to the given value, the distance is assumed to be in
units of millimeters. The initial focal plane distance is 12.5 mm.
---------------------------------------------------------------------
7.7 WORLDS AND WINDOWS.
"W" Make Window in Now Display Ring.
"αW" Make Window in New Display Ring.
"βW" Make New World.
"{" and "}" Step Now Display.
"α{" and "α}" Step Now World.
7.8 IMAGE RINGS.
"αT" Make a Simulated Image Body.
"←" and "→" Step Perceived CRE Image Ring.
"α←" and "α→" Step Predicted OCCULT Image Ring.
8.0 FILE FORMATS.
CAMERA FILE FORMAT.
A GEOMED camera file consists of exactly twelve words:
---------------------------------------------------------------------
CAMERA FILE
WORD NAME CONTENTS
0 CX Camera lens center location
1 CY ...in world coordinates
2 CZ ...in centimeters
3 PAN Camera principle ray orientation
4 TILT ...with respect to world coordinates
5 SWING ...in radians
6 PDX Width of a pixel in microns.
7 PDY Height of a pixel in microns.
8 PDZ Depth of a pixel in microns.
9 FOCAL Focal plane distance in millimeters.
10 LDX Width of image raster in pixels.
11 LDY Height of image raster in pixels.
---------------------------------------------------------------------
CONVERSION FROM CAMERA FRAME TO P.T.S.
TILT ← ACOS(KX);
TMP ← 1/SIN(TILT);
PAN ← ATAN2(KX*TMP,-KY*TMP);
SWING ← ACOS (JZ*TMP);
CONVERSION FROM P.T.S. TO CAMERA FRAME.
FRAME ← MKROT1(PAN,TILT,SWING);
---------------------------------------------------------------------
B3D FILE FORMAT
A body 3-D file represents a body and all its parts; the B3D
files are read (written) by a recursive routine that first inputs
(outputs) a body header then all the faces, edges and vertices of the
bodies surface and then recurses for the sub-parts of the body.
---------------------------------------------------------------------
BODY HEADER - 18 WORDS.
0 Parts CounT
1 Face Count
2 Edge Count
3 Vertex Count
4 5 PNAME
6 7 8 XWC YWC ZWC
9 10 11 IX IY IZ
12 13 14 JX JY JZ
15 16 17 KX KY KZ
FACES - 2 WORDS EACH.
BYTE(9)RED,GRN,BLU,ALB ;REFLECTIVITIES.
BYTE(6)R,G,B,W,M,N ;LUMINOUSITIES.
EDGES - 4 WORDS EACH.
XWD NFACE,PFACE
XWD NVT,PVT
XWD NCW,PCW
XWD NCCW,PCCW
VERTICES - 3 WORDS EACH.
XWC
YWC
ZWC
GEM FILE FORMAT
---------------------------------------------------------------------
BODY HEADER - 20 WORDS.
0 Parts CounT
1 Face Count
2 Edge Count
3 Vertex Count
4 5 PNAME
TYPE BITS - MEMORY[BODY+0]
USER WORD - MEMORY[BODY+8]
6 7 8 XWC YWC ZWC
9 10 11 IX IY IZ
12 13 14 JX JY JZ
15 16 17 KX KY KZ
FACES - 2 WORDS EACH.
BYTE(9)RED,GRN,BLU,ALB ;REFLECTIVITIES.
BYTE(6)R,G,B,W,M,N ;LUMINOUSITIES.
TYPE BITS - MEMORY[FACE+0]
USER WORD - MEMORY[FACE+8]
EDGES - 4 WORDS EACH.
XWD NFACE,PFACE
XWD NVT,PVT
XWD NCW,PCW
XWD NCCW,PCCW
TYPE BITS - MEMORY[EDGE+0]
USER WORD - MEMORY[EDGE+8]
VERTICES - 3 WORDS EACH.
XWC
YWC
ZWC
TYPE BITS - MEMORY[EDGE+0]
USER WORD - MEMORY[EDGE+8]
PLT FILE FORMAT
V2D FILE FORMAT
GEO FILE FORMAT
9.0 COMMAND SUMMARY BY LEXICAL ORDER.
000 NULL No operation.
001 ↓ Push stack down.
α↓ Rotate stack down.
002 α Control key prefix.
003 β Meta key prefix.
004 ∧ PVT, Positive vertex link.
005 ¬ Evert Body.
α¬ Body Subtraction.
006 ε Meta-Control keys prefix.
007 π Set rotation strength, RDEL.
010 λ Set translation strength, TDEL.
011 TAB Comment prefix character.
012 LF No operation.
013 VT No operation.
014 FF No operation.
015 CR Reset iteration count.
016 ∞ Instant cube.
α∞ Instant torus.
β∞ Crosseyed stereo.
017 ∂ Datum display Toggle.
α∂ Datum display format Toggle.
020 ⊂ BRO, parts tree link.
021 ⊃ SIS, parts tree link.
022 ∩ DAD, parts tree link.
α∩ Body Intersection.
023 ∪ SON, parts tree link.
α∪ Body Union.
024 ∀ Enable all body motions.
α∀ Disable frame motion.
β∀ Disable vertex motion.
ε∀ Disable parts motion.
025 ∃ No operation.
026 ⊗ Push universe node into stack.
027 ↔ Swap stack elements 1 and 2.
α↔ Swap stack elements 1 and 3.
β↔ Swap stack elements 1 and last.
ε↔ Swap stack elements 2 and 3.
030 _ Sticky ALT display refresh.
α_ Sticky αALT display refresh.
β_ Sticky βALT display refresh.
ε_ Sticky εALT display refresh.
031 → ALT2, link fetch.
032 ~ No operation.
033 ≠ No operation.
034 ≤ NED, link fetch.
035 ≥ PED, link fetch.
036 ≡ Toggle status display enable.
α≡ Toggle window border display enable.
037 ∨ NVT, link fetch.
040 SPACE Display refresh.
041 ! Set translation default.
042 " No operation.
043 # Clear page printer.
α# Enter DDT.
044 $ Make convex.
α$ Edge slurp.
045 % Set DDEL, dilation strength.
046 & No operation.
047 ' No operation.
050 ( Euclidean transformation minus Y.
051 ) Euclidean transformation plus Y.
052 * Euclidean transformation plus Z.
053 + Fetch other face or vertex.
054 , Fetch clockwise.
055 - Euclidean transformation minus Z.
056 . Fetch counter clockwise.
057 / Halve strength of transformation.
060-071 DIGITS 0 THRU 9
072 : Euclidean transformation plus X.
073 ; Euclidean transformation minus X.
074 <
075 = No operation.
076 >
077 ? Information prefix.
100 @ Set rotation default.
101 A Attach.
βA Cycle Axis count.
102 B Body of a face, edge or vertex.
αB Retrieve body by numeral or by name.
103 C Copy.
αC Push now camera into the stack.
104 D Detach.
αD Darken.
εD Undarken.
105 E Make edge and vertex.
εE Exit GEOMED.
106 F Step frame selector forwards.
αF Accept focal plane distance.
βF Step frame selector backwards.
107 G Glue face-face.
110 H Help display.
111 I Input B3D.
αI Input CAM.
βI Input CRE.
εI Input GEM.
112 J Join vertex-vertex.
113 K Kill entity.
αK Kill edge and vertex.
114 L Face, edge, vertex lights toggle.
αL Body lights toggle.
βL Frame of reference lights toggle.
115 M Midpoint and edge.
116 N Name a body.
117 O Output B3D.
αO Output CAM.
βO Output V2D.
εO Output GEM.
120 P Plot file output.
121 Q Toggle frame origin switch.
122 R Rotation completion.
123 S Sweep cylinder.
αS Sweep pyramid.
βS Sweep cylinder edges not sharp.
εS Sweep pyramid edges not sharp.
124 αT Take a simulated picture.
125 U Unmove a body.
126 V Make vertex body.
αV Retrieve Nth vertex of a body.
βV Make body node.
127 W Make window in now display ring.
αW Make window in a new display ring.
βW Make new world at end of world ring.
130 X Extended command scanner:
PLACE <x> <y> <z>
ORIENT <pan> <tilt> <swing>
CUBIC <X width> <Y height> <Z depth>
BALL <radius> <M longitudes> <N latitudes>
CYLN <radius> <N sides> <Z length>
CUT <x> <y> <z>
COLOR <n>RED <n>BLU <n>GRN <n>ALBEDO
NSHARP
SCROLL
131 Y No operation.
132 βZ Read commands from GEO text file.
133 [ No operation.
134 \ Double strength of transformation.
135 ] No operation.
136 ↑ Pop stack.
α↑ Rotate stack upwards.
137 ← ALT link fetch.
α← Step thru simulated image ring of now camera.
140 ` No operation.
141 THRU 172 Lower case letters same as upper case.
173 { Step now display backwards.
α{ Step now world backwards.
β{ Step now camera backwards.
174 | Invert edge linear orientation.
175 ALT Display refresh with hidden lines eliminated.
αALT Display refresh with bask side faces eliminated.
βALT Display refresh with everything visible.
εALT Display refresh with OCCULT diagonostics.
176 } Step now display forwards.
α} Step now world forwards.
β} Step now camera forwards.
177 RUBOUT No operation.